标题的内容已经将主题点明了,通过这一篇的学习我觉得可以考虑带入前端H5和CSS编写网页的思路来理解。使用Subform实现可以简单理解成前端DIV设置了浮动的属性。而使用Table来撑满整个网页的前端设计和这里有异曲同工之感。
Adobe Form打印两个相邻的表格
一、介绍
标题的内容已经将主题点明了,通过这一篇的学习我觉得可以考虑带入前端H5和CSS编写网页的思路来理解。使用Subform实现可以简单理解成前端DIV设置了浮动的属性。而使用Table来撑满整个网页的前端设计和这里有异曲同工之感。
二、功能实现
之前已经介绍过很多次创建过程了,所以这里就不再介绍如何创建Interface和Adobe Form对象了。直接从设置内容开始。
1.Interface
(1)添加输入参数
(2)定义全局类型
1 | TYPES: |
(3)定义全局变量
(4)初始化逻辑
(5)Form 逻辑
1 | FORM GET_MARA USING V_ROW_L. |
2.Adobe Form
(1)创建Adobe Form
使用事物代码 SFP 创建Adobe Form 对象。绑定对应的Interface对象。然后将在Interface中创建的全局变量导入到Adobe Form中。
(2)创建文本抬头
在Page1下新建一个Subform,然后添加一个文本对象。
① 插入Subform
② 新建文本对象
将新建好的文本对象放在上面新建的Subform下面。
(3)设置表格分页
选中DetailBody对象,然后设置其Subform的Content对象的属性为Flowed。然后选中 Allow Page Breaks Within Content 。
(4)新建总Subform
在DetailBody下新建一个新的总SubForm对象。然后设置其Subform的Content对象的属性为Flowed,然后选中 Allow Page Breaks Within Content ,最后再修改Flow Direction的值为Westem Text。后面所有的SubForm对象都需要设置这三个属性。
再设置下总Subform的Margins - top为1.2in。这样不会让数据与上面的文本抬头重叠。
到这个地方就完成了全部公共的内容。下面是两种方案的介绍。
(5)测试源代码
1 | PARAMETERS: |
3.方案一 Subform
(1)说明
这种方式是通过SubForm来实现的。但是和教程网站不一样,我虽然通过对齐方式等设置完成了符合预期的内容,但是存在新的问题。左侧的数据内容如果过多,会将右侧的内容挤到下面的页去。
(2)新建Subform
新建如下所示的Subform对象。然后设置他们的Subform的Content对象的属性为Flowed,然后选中 Allow Page Breaks Within Content ,最后再修改Flow Direction的值为Westem Text。
在Layout页签中的设置如下。
(3)新加数据Subform
同理需要设置和上面Subform一样的属性内容。Subform的Content对象的属性为Flowed,然后选中 Allow Page Breaks Within Content ,最后再修改Flow Direction的值为Westem Text。
Layout的属性内容如下所示。请注意各个Subform不同的对齐方式。
(4)添加数据表
在对应的数据Subform下新加从Interface中创建的全局变量。然后勾选表对象的Object —> Table 的 Allow Page Breaks within Content。
(5)Form测试
① 选择屏幕
② 执行结果
这么看似乎是满足了需求,而教程网站上的内容在第二页开始就靠左显示了。然后我尝试修改了Subform的对齐方式,让右边的Subform向右对齐就不会出现问题了。
但是使用这种方式创建的PDF有个新问题,并且我无法知晓教程中的Form是否存在同样的问题。那就是当左侧的表数据过多时,会将右侧的数据撑到下一页。
我尝试修改了左侧Subform的其他属性,但遗憾的是并没有什么效果。只要左侧的数据变多就会将右侧的数据挤到后面的页。
4.方案二 Table
(1)说明
这种设计思路和前端通过Table来控制元素在网页上展示内容的方式类似。通过表格的行列来控制元素的位置。对应到这个需求的话就相当于是创建一个单行两列的Table对象。
(2)新建Table对象
选中SubformToHold2SubForms对象,然后点击上面的Insert —> Standard —> Table。
新建好的Table对象如下所示。同时修改Table的名称为TwoColTables。然后将表格横向拉长到合适的宽度。
(3)修改Table Row属性
选中Cell1右键设置为 Wrap in Subform。同理将Cell2也设置为这个属性。
设置好的Table对象如下所示,同时重命名两个Subform对象,并删除两个文本对象 Cell1 与 Cell2。
(4)拖放数据对象
将上面LHSandRHS对象下的LHS与RHS对象拖放到表对象对应的Subform中。
完成后的表格对象内容如下所示。
(5)设置表格Subform的属性
最后一个步骤,需要让表格中的部分Subform被定位。
双击选中Row1对象,勾选中 Allow Page Breaks within Content,否则表格不会翻页。
(6)Form 测试
① 选择屏幕
使用上面的问题数据进行测试。
② 执行结果
结果没有问题,符合预期。
三、参考资料
SAP Adobe Form Tutorial. Part XIII. How to Print two Tables Adjacent to each other?